{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using Theano backend.\n",
      "WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not available  (error: Unable to get the number of gpus available: unknown error)\n"
     ]
    }
   ],
   "source": [
    "# Few import statements\n",
    "import os\n",
    "import scipy.io.wavfile as wav\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from keras.models import Sequential\n",
    "from keras.layers.core import TimeDistributedDense\n",
    "from keras.layers.recurrent import LSTM\n",
    "from IPython.display import Audio\n",
    "from pipes import quote"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def read_wav_as_np(file):\n",
    "    # wav.read returns the sampling rate per second  (as an int) and the data (as a numpy array)\n",
    "    data = wav.read(file)\n",
    "    # Normalize 16-bit input to [-1, 1] range\n",
    "    np_arr = data[1].astype('float32') / 32767.0\n",
    "    #np_arr = np.array(np_arr)\n",
    "    return np_arr, data[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def write_np_as_wav(X, sample_rate, file):\n",
    "    # Converting the tensor back to it's original form\n",
    "    Xnew = X * 32767.0\n",
    "    Xnew = Xnew.astype('int16')\n",
    "    # wav.write constructs the .wav file using the specified sample_rate and tensor\n",
    "    wav.write(file, sample_rate, Xnew)\n",
    "    return"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def convert_sample_blocks_to_np_audio(blocks):\n",
    "    # Flattens the blocks into a single list\n",
    "    song_np = np.concatenate(blocks)\n",
    "    return song_np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def convert_np_audio_to_sample_blocks(song_np, block_size):\n",
    "\n",
    "    # Block lists initialised\n",
    "    block_lists = []\n",
    "\n",
    "    # total_samples holds the size of the numpy array\n",
    "    total_samples = song_np.shape[0]\n",
    "    # print('total_samples=',total_samples)\n",
    "\n",
    "    # num_samples_so_far is used to loop through the numpy array\n",
    "    num_samples_so_far = 0\n",
    "\n",
    "    while (num_samples_so_far < total_samples):\n",
    "\n",
    "        # Stores each block in the \"block\" variable\n",
    "        block = song_np[num_samples_so_far:num_samples_so_far + block_size]\n",
    "\n",
    "        if (block.shape[0] < block_size):\n",
    "            # this is to add 0's in the last block if it not completely filled\n",
    "            padding = np.zeros((block_size - block.shape[0],))\n",
    "            # block_size is 44100 which is fixed throughout whereas block.shape[0] for the last block is <=44100\n",
    "            block = np.concatenate((block,padding))\n",
    "        block_lists.append(block)\n",
    "        num_samples_so_far += block_size\n",
    "    return block_lists"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def time_blocks_to_fft_blocks(blocks_time_domain):\n",
    "    # FFT blocks initialized\n",
    "    fft_blocks = []\n",
    "    for block in blocks_time_domain:\n",
    "        # Computes the one-dimensional discrete Fourier Transform and returns the complex nD array\n",
    "        # i.e The truncated or zero-padded input, transformed from time domain to frequency domain.\n",
    "        fft_block = np.fft.fft(block)\n",
    "        # Joins a sequence of blocks along frequency axis.\n",
    "        new_block = np.concatenate((np.real(fft_block), np.imag(fft_block)))\n",
    "        fft_blocks.append(new_block)\n",
    "    return fft_blocks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fft_blocks_to_time_blocks(blocks_ft_domain):\n",
    "    # Time blocks initialized\n",
    "    time_blocks = []\n",
    "    for block in blocks_ft_domain:\n",
    "        num_elems = block.shape[0] / 2\n",
    "        # Extracts real part of the amplitude corresponding to the frequency\n",
    "        real_chunk = block[0:num_elems]\n",
    "        # Extracts imaginary part of the amplitude corresponding to the frequency\n",
    "        imag_chunk = block[num_elems:]\n",
    "        # Represents amplitude as a complex number corresponding to the frequency\n",
    "        new_block = real_chunk + 1.0j * imag_chunk\n",
    "        # Computes the one-dimensional discrete inverse Fourier Transform and returns the transformed\n",
    "        # block from frequency domain to time domain\n",
    "        time_block = np.fft.ifft(new_block)\n",
    "        # Joins a sequence of blocks along time axis.\n",
    "        time_blocks.append(time_block)\n",
    "    return time_blocks"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** Set desired sampling rate and block size. Also assign the path of the music file to _filename_ **"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "sample_frequency = 44100\n",
    "block_size = 44100\n",
    "filename = '/home/subbu/Desktop/Music Preprocessing/Bright Wish.mp3'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "files = filename.split('/')\n",
    "orig_filename = files[-1][0:-4]\n",
    "if (filename[0] == '/'):\n",
    "    new_path = '/'\n",
    "for i in range(len(files) - 1):\n",
    "    new_path += files[i] + '/'\n",
    "# We define the file names for the newly created WAV files and the Mono mp3 file\n",
    "filename_tmp = new_path + orig_filename + 'Mono.mp3'\n",
    "new_name = new_path + orig_filename + '.wav'\n",
    "\n",
    "# These lines calls LAME to resample the audio file at the standard analog frequency of 44,100 Hz and then convert it to WAV\n",
    "sample_freq_str = \"{0:.1f}\".format(float(sample_frequency) / 1000.0)\n",
    "cmd = 'lame -a -m m {0} {1}'.format(quote(filename), quote(filename_tmp))\n",
    "os.system(cmd)\n",
    "cmd = 'lame --decode {0} {1} --resample {2}'.format(quote(filename_tmp), quote(new_name), sample_freq_str)\n",
    "os.system(cmd)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** Mono version and WAV version of the input MP3 file can now be found in the directory containing the input MP3 file. **\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** Visualizing the WAV file **\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nD7VnuKkz7wTJAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f2aa8fe3d30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "bitrate, data = wav.read(new_name)\n",
    "plt.plot(data)\n",
    "plt.title(\"WAV File\")\n",
    "plt.xlabel(\"Time (x 10^(-5)s)\")\n",
    "plt.ylabel(\"Amplitude\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# wav_array contains normalized data\n",
    "wav_array, bitrate = read_wav_as_np(new_name)\n",
    "# wav_array is converted into blocks with zeroes padded to fill the empty space in last block if any\n",
    "wav_blocks_zero_padded = convert_np_audio_to_sample_blocks(wav_array, block_size)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** Visualizing Zero Padded WAV File **\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f2aa8fe3c18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Flattens the blocks into an array\n",
    "wav_array_zero_padded = convert_sample_blocks_to_np_audio(wav_blocks_zero_padded)\n",
    "plt.plot(wav_array_zero_padded)\n",
    "plt.title(\"Zero Padded WAV File\")\n",
    "plt.xlabel(\"Time (x 10^(-5)s)\")\n",
    "plt.ylabel(\"Amplitude\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** Thus, zero padding does not change the waveform. It just makes the matrix computations easier. \n",
    "Now shift the zero padded wav blocks to the left by 1 column and use it for computing loss function during the training. Visualizing the shifted file.**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f2aa8cdd908>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "shifted_wav_blocks_zero_padded = wav_blocks_zero_padded[1:]\n",
    "shifted_wav_array_zero_padded = convert_sample_blocks_to_np_audio(shifted_wav_blocks_zero_padded)\n",
    "plt.plot(shifted_wav_array_zero_padded)\n",
    "plt.title(\"Shifted WAV File\")\n",
    "plt.xlabel(\"Time (x 10^(-5)s)\")\n",
    "plt.ylabel(\"Amplitude\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dimension of wav blocks before fft:  (41, 44100)\n",
      "Dimension of the training dataset (wav blocks after fft):  (41, 88200)\n"
     ]
    }
   ],
   "source": [
    "# Fast fourier transforming the wav blocks into frequency domain\n",
    "print('Dimension of wav blocks before fft: ',np.shape(wav_blocks_zero_padded))\n",
    "\n",
    "X = time_blocks_to_fft_blocks(wav_blocks_zero_padded)\n",
    "Y = time_blocks_to_fft_blocks(shifted_wav_blocks_zero_padded)\n",
    "\n",
    "print('Dimension of the training dataset (wav blocks after fft): ',np.shape(X))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Visualizing the fast fourier transformed WAV blocks (X: Used for training, Y: Used for computing loss function)**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f2aa596aef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_flat = np.concatenate(X)\n",
    "plt.plot(X_flat)\n",
    "plt.title(\"X\")\n",
    "plt.xlabel(\"Frequency\")\n",
    "plt.ylabel(\"Density\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nb2Tv6ukAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f2aa8d1fc50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Y_flat = np.concatenate(Y)\n",
    "plt.plot(Y_flat)\n",
    "plt.title(\"Y\")\n",
    "plt.xlabel(\"Frequency\")\n",
    "plt.ylabel(\"Density\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "cur_seq = 0\n",
    "chunks_X = []\n",
    "chunks_Y = []\n",
    "max_seq_len = 10\n",
    "total_seq = len(X)\n",
    "while cur_seq + max_seq_len < total_seq:\n",
    "    chunks_X.append(X[cur_seq:cur_seq + max_seq_len])\n",
    "    chunks_Y.append(Y[cur_seq:cur_seq + max_seq_len])\n",
    "    cur_seq += max_seq_len\n",
    "# Number of examples\n",
    "num_examples = len(chunks_X) \n",
    "# Imaginary part requires the extra space\n",
    "num_dims_out = block_size * 2\n",
    "# Dimensions of the training dataset\n",
    "out_shape = (num_examples, max_seq_len, num_dims_out)\n",
    "x_data = np.zeros(out_shape)\n",
    "y_data = np.zeros(out_shape)\n",
    "# Populating the training dataset\n",
    "for n in range(num_examples):\n",
    "    for i in range(max_seq_len):\n",
    "        x_data[n][i] = chunks_X[n][i]\n",
    "        y_data[n][i] = chunks_Y[n][i]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** Training dataset is ready! **\n",
    "** Building the model. **"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Input layer size:  88200\n",
      "Hidden layer size:  1024\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/subbu/anaconda3/lib/python3.5/site-packages/keras/layers/core.py:1015: UserWarning: TimeDistributedDense is deprecated, please use TimeDistributed(Dense(...)) instead.\n",
      "  warnings.warn('TimeDistributedDense is deprecated, '\n"
     ]
    }
   ],
   "source": [
    "num_frequency_dimensions = (np.shape(X))[1]\n",
    "num_hidden_dimensions = 1024\n",
    "print('Input layer size: ',num_frequency_dimensions)\n",
    "print('Hidden layer size: ',num_hidden_dimensions)\n",
    "# Sequential is a linear stack of layers\n",
    "model = Sequential()\n",
    "# This layer converts frequency space to hidden space\n",
    "model.add(TimeDistributedDense(input_dim=num_frequency_dimensions, output_dim=num_hidden_dimensions))\n",
    "# return_sequences=True implies return the entire output sequence & not just the last output\n",
    "model.add(LSTM(input_dim=num_hidden_dimensions, output_dim=num_hidden_dimensions, return_sequences=True))\n",
    "# This layer converts hidden space back to frequency space\n",
    "model.add(TimeDistributedDense(input_dim=num_hidden_dimensions, output_dim=num_frequency_dimensions))\n",
    "# Done building the model.Now, configure it for the learning process\n",
    "model.compile(loss='mean_squared_error', optimizer='rmsprop')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Iteration: 0\n",
      "Epoch 1/3\n",
      "4/4 [==============================] - 2s - loss: 215.9425\n",
      "Epoch 2/3\n",
      "4/4 [==============================] - 2s - loss: 215.9183\n",
      "Epoch 3/3\n",
      "4/4 [==============================] - 2s - loss: 215.6781\n",
      "Iteration: 3\n",
      "Epoch 1/3\n",
      "4/4 [==============================] - 1s - loss: 215.4013\n",
      "Epoch 2/3\n",
      "4/4 [==============================] - 1s - loss: 215.1780\n",
      "Epoch 3/3\n",
      "4/4 [==============================] - 1s - loss: 214.9787\n",
      "Training complete!\n",
      "[WARNING] /home/subbu/Desktop/Music Preprocessing/Weights already exists - overwrite? [y/n]y\n",
      "[TIP] Next time specify overwrite=True in save_weights!\n"
     ]
    }
   ],
   "source": [
    "# Number of iterations for training\n",
    "num_iters = 5\n",
    "# Number of iterations before we save our model\n",
    "epochs_per_iter = 3\n",
    "# Number of training examples pushed to the GPU per batch.\n",
    "batch_size = 5\n",
    "# Path to weights file\n",
    "weights_path = '/home/subbu/Desktop/Music Preprocessing/Weights'\n",
    "cur_iter = 0\n",
    "while cur_iter < num_iters:\n",
    "    print('Iteration: ' + str(cur_iter))\n",
    "    # Iterate over the training data in batches\n",
    "    history = model.fit(x_data, y_data, batch_size=batch_size, nb_epoch=epochs_per_iter, verbose=1, validation_split=0.0)\n",
    "    cur_iter += epochs_per_iter\n",
    "print('Training complete!')\n",
    "model.save_weights(weights_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "** The training is complete and weights have been saved in the path specified! **"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** Generating the song. We use a seed sequence which serves as a starter for the song. The model predicts the next note based on the previous sequence. **"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# We take the first chunk of the training data itself for seed sequence.\n",
    "seed_seq = x_data[0]\n",
    "# Reshaping the sequence to feed to the RNN.\n",
    "seed_seq = np.reshape(seed_seq, (1, seed_seq.shape[0], seed_seq.shape[1]))\n",
    "# Generated song sequence is stored in output.\n",
    "output = []\n",
    "for it in range(max_seq_len):\n",
    "    # Generates new value\n",
    "    seedSeqNew = model._predict(seed_seq) \n",
    "    # Appends it to the output\n",
    "    if it == 0:\n",
    "        for i in range(seedSeqNew.shape[1]):\n",
    "            output.append(seedSeqNew[0][i].copy())\n",
    "    else:\n",
    "        output.append(seedSeqNew[0][seedSeqNew.shape[1]-1].copy()) \n",
    "    # newSeq contains the generated sequence.\n",
    "    newSeq = seedSeqNew[0][seedSeqNew.shape[1]-1]\n",
    "    # Reshaping the new sequence for concatenation.\n",
    "    newSeq = np.reshape(newSeq, (1, 1, newSeq.shape[0]))\n",
    "    # Appending the new sequence to the old sequence.\n",
    "    seed_seq = np.concatenate((seed_seq, newSeq), axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# The path for the generated song\n",
    "song_path = '/home/subbu/Desktop/Music Preprocessing/gen_song.wav'\n",
    "# Reversing the conversions\n",
    "time_blocks = fft_blocks_to_time_blocks(output)\n",
    "song = convert_sample_blocks_to_np_audio(time_blocks)\n",
    "write_np_as_wav(song, sample_frequency, song_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** Let's listen to the song! **"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "Audio(song_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "** THE END. **"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
